package 面向对象中级.课堂练习.Exercise05;

public class CreditCard extends DepositCard{
    /**
     * （2）声明一个银行信用卡CreditCard类，继承储蓄卡类
     *      * 增加属性：本月可透支总额度，本月已透支金额
     *      * 重写public void withdraw(double money)，可透支，
     *      * 取款金额超过账户余额+本月还可透支额度，提示超过可透支额度
     *      * 取款金额在账户余额范围内，不用透支
     *      * 取款金额超过账户余额但在可透支范围内，需要透支
     *      * 重写public void save(double money)，
     *      * 存款金额不能为负数，否则提示存款金额不能为负数
     *      * 本次存款金额只够偿还部分已透支金额
     *      * 本次存款金额除了偿还透支金额，还有剩余
     */
    private double maxOverdraf;//可透支总额度
    private double overdraft;//已透支金额

    public CreditCard(String id, double balance, double maxOverdraf, double overdraft) {
        super(id, balance);
        this.maxOverdraf = maxOverdraf;
        this.overdraft = overdraft;
    }

    public double getMaxOverdraf() {
        return maxOverdraf;
    }

    public void setMaxOverdraf(double maxOverdraf) {
        this.maxOverdraf = maxOverdraf;
    }

    public double getOverdraft() {
        return overdraft;
    }

    public void setOverdraft(double overdraft) {
        this.overdraft = overdraft;
    }

    public void withdraw(double money){
        //取款金额超过账户余额+本月还可透支额度，提示超过可透支额度
        //取款金额在账户余额范围内，不用透支
        if (money>=getBalance()+maxOverdraf){
            System.out.println("超过可透支额度");
        }else if (money<=getBalance()){
            System.out.println("不用透支");
        }else if (money>getBalance()&&money<overdraft){
            System.out.println("需要透支");
        }
    }

    public void save(double money){
        //存款金额不能为负数，否则提示存款金额不能为负数
        //本次存款金额只够偿还部分已透支金额
        //本次存款金额除了偿还透支金额，还有剩余
        if (money<0){
            System.out.println("存款金额不能为负数");
        }else if (money<=overdraft){
            overdraft-=money;
            System.out.println("本次存款金额只够偿还部分已透支金额");
        }else {
            setBalance(getBalance()+money-overdraft);
            overdraft=0;
        }
    }
}
